perm filename STTINT.SAI[SS,SYS]1 blob
sn#289739 filedate 1977-06-23 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "STTINT STATISTICS INTERPRETER"
C00006 00003 INIT←-1
C00013 ENDMK
C⊗;
BEGIN "STTINT STATISTICS INTERPRETER"
COMMENT
XD CSZSTA,000000 BYTE(1)0(2)0(9)CORE PAGE COUNT(6)J#
XD NAMSTA,400000 BYTE(1)1(5)0(6)UNUSED(6)J# JOB NAME FOLLOWS IN 2 BYTES
XD QUESTA,410000 BYTE(1)1(5)1(6)QUEUE CODE(6)J#
XD SINSTA,420000 BYTE(1)1(5)2(6)JBTSIN BIT #(6)J#
XD SEGSTA,430000 BYTE(1)1(5)3(6)SEGMENT #(6)J#
XD SPWSTA,440000 BYTE(1)1(5)4(6)0-17:TICS OF SPW, 77:SPW OFF(6)J#
XD GLUSTA,450000 BYTE(1)1(5)5(6)JBTGLU COUNT(6)J#
XD LOKSTA,460000 BYTE(1)1(5)6(6)0:UNLOCKING, 1:LOCKING, 2:LOKSWP(6)J#
XD FITSTA,470000 BYTE(1)1(5)7(6)1:WANT TO LOCK(6)J# FIT←J
XD HPGSTA,500000 BYTE(1)1(5)10(6)UNUSED(6)J# NEXT BYTE IS # HI PAGES
XD JOBSTA,510000 BYTE(1)1(5)11(6)UNUSED(6)J# NEXT JOB TO RUN
XD TIMSTA,520000 BYTE(1)1(5)12(12)TIME HIGH ORDER TIME.
NEXT BYTE IS LOW ORDER TIME
XD SWPSTA,530000 BYTE(1)1(5)13(6)1:OUT, 0:IN (6)J# SWAP OP STARTS
2 - FORCE SET, 3-CONSIDERED FOR SWAPOUT
4 - DEADLOCKED, 5 - RESCNIN, 6 - NOFIT
XD CORSTA,540000 BYTE(1)1(5)14(6)UNUSED(6)UNUSED NEXT BYTES ARE:
LOFREE, HIFREE, HIUSED, LOKTOT, CORMX, CORHMX
XD MARK,770000 BYTE(1)1(5)37(6)CODE(6)J# MARK
CODE: 0=PRINT JOB INFO, 1=CLEAR INIT
;
EXTERNAL INTEGER _SKIP_;
INTEGER I,J,K,L,OP,EOF,VAL,OTHERHALF,OURJOB,LINES,TIME,INIT;
LABEL SKIP_OURJOB;
STRING S1,S2,S3,S4,FILE;
DEFINE CRLF="'15&'12",TAB="'11",MAXLINES="52";
DEFINE NAME="1",SIZE="2",HICOUNT="3",QUEUE="4",JBTSIN="5",SEGMENT="6",
GLUE="7",LOCK="8",SPW10="9",SPW6="10",INOUT="11",MAXVAL="INOUT";
DEFINE _NQUEUES="'234",_QNAMS="'235";
INTEGER ARRAY JOBS[1:MAXVAL,0:'77];
STRING ARRAY QNAMS[-1:'77];
PRELOAD_WITH "INT",
"PHANTOM",
"COMMAND",
"JOBRD",
"SPW",
['37-4]"UNDEF";
STRING ARRAY SINNAMES[0:'37];
DEFINE TITLE=
"""JOB # OP VALUE SIZES IN/OUT QUEUE SEG # JOBNAME JBTSIN JBTGLU SPW10 SPW6""";
BOOLEAN HALF,DIRDEV,SPECIAL;
INTEGER PROCEDURE WORD;
IF HALF THEN BEGIN
HALF←FALSE;
RETURN(OTHERHALF);
END
ELSE BEGIN
INTEGER TEMP;
HALF←TRUE;
TEMP←WORDIN(0);
OTHERHALF←TEMP LAND '777777;
RETURN(TEMP LSH -18);
END;
PROCEDURE COUNT_LINE;
IF (LINES←LINES-1)<0 THEN BEGIN
OUT(1,'14&TITLE&CRLF&CRLF);
LINES←MAXLINES-3;
END;
PROCEDURE PRINTIT;
BEGIN
COUNT_LINE;
OUT(1,(IF 0<J<10 THEN " " ELSE NULL)&CVS(J)&S3&S1&S4&CRLF);
S4←NULL;
END;
INIT←-1;
FOR I←0 STEP 1 UNTIL '77 DO JOBS[QUEUE,I]←JOBS[INOUT,I]←-1;
I←CALL(_NQUEUES,"PEEK");
J←CALL(_QNAMS,"PEEK");
FOR K←0 STEP 1 UNTIL I DO QNAMS[K]←CVSTR(CALL(J+K,"PEEK"));
FOR I←I STEP 1 UNTIL '77 DO QNAMS[I]←"UNDEF";
OPEN(0,"DSK",'10,2,0,0,0,EOF);
LOOKUP(0,"STATS.DAT",EOF);
IF EOF THEN USERERR(0,0,"Can't find STATS.DAT");
HALF←FALSE;
S1←(IF CALL(CVSIX("LST"),"DEVCHR") THEN "LST" ELSE "DSK");
OPEN(1,S1,0,0,2,0,0,0);
DIRDEV←CALL(CVSIX(S1),"DEVCHR") LAND '4000000;
IF DIRDEV THEN BEGIN
OUTSTR("Output file : ");
IF EQU(NULL,FILE←INCHWL) THEN FILE←"STATS.LST";
IF _SKIP_='175 THEN BEGIN COMMENT FILE NAME TERMINATED WITH AN ALTMODE;
OUTSTR(CRLF);
SPECIAL←TRUE
END ELSE SPECIAL←FALSE;
ENTER(1,FILE,EOF);
IF EOF THEN USERERR(0,0,"Can't enter "&FILE);
PTOSTR(0,"SPOOL "&FILE);
END;
OUT(1,TITLE&CRLF&CRLF);
LINES←MAXLINES-2;
OURJOB←WORD;
S4←NULL;
WHILE TRUE DO BEGIN
SKIP_OURJOB: VAL←WORD;
IF EOF THEN DONE;
IF VAL=0 THEN GO TO SKIP_OURJOB;
J←VAL LAND '77;
IF J=OURJOB THEN GO TO SKIP_OURJOB;
IF VAL LAND '400000 THEN BEGIN
OP←(VAL LSH -12)LAND '37;
VAL←(VAL LSH -6)LAND '77;
END
ELSE BEGIN
OP←-1-(VAL LSH -15);
VAL←(VAL LSH -6)LAND '777;
END;
S1←TAB&CVS(JOBS[SIZE,J])&","&CVS(JOBS[HICOUNT,J])&TAB&
(IF JOBS[INOUT,J] THEN "SWAPPED" ELSE "IN CORE")&
TAB&QNAMS[JOBS[QUEUE,J]]&
TAB&CVS(JOBS[SEGMENT,J])&TAB&CVXSTR(JOBS[NAME,J])&
TAB&CVOS(JOBS[JBTSIN,J])&TAB&CVS(JOBS[GLUE,J])&
TAB&CVOS(JOBS[SPW10,J])&TAB&CVOS(JOBS[SPW6,J]);
IF OP='37 THEN
IF VAL=0 THEN BEGIN S3←" INITIAL STATE"; PRINTIT;
GO TO SKIP_OURJOB END
ELSE IF VAL=1 THEN BEGIN INIT←0; GO TO SKIP_OURJOB END;
IF ¬(-1≤OP≤'14) THEN BEGIN
COUNT_LINE;
OUT(1,"ILLEGAL OP-CODE, VALUE = "&CVS(OP)&CRLF);
GO TO SKIP_OURJOB;
END;
CASE OP+1 OF BEGIN
[0] BEGIN
S3←" SIZE "&CVS(VAL);
IF VAL≠0 THEN JOBS[SIZE,J]←VAL ELSE JOBS[HICOUNT,J]←0;
END;
[1] BEGIN COMMENT OP=0 NAME;
VAL←(WORD LSH 18)+WORD;
S3←" NAME "&CVXSTR(JOBS[NAME,J]←VAL);
END;
[2] S3←" QUEUE "&QNAMS[JOBS[QUEUE,J]←VAL];
[3] BEGIN
IF VAL LAND '40 THEN BEGIN
S3←" +";
JOBS[JBTSIN,J]←JOBS[JBTSIN,J]LOR('400000 LSH -(VAL←VAL-'40));
END
ELSE BEGIN
S3←" -";
JOBS[JBTSIN,J]←JOBS[JBTSIN,J]LAND LNOT('400000 LSH -VAL);
END;
S3←S3&"JBTSIN "&SINNAMES[VAL];
END;
[4] IF VAL THEN S3←" SEG # "&CVS(JOBS[SEGMENT,J]←VAL)
ELSE S3←" FLUSHES SEGMENT";
[5] IF VAL='77 THEN BEGIN
S3←" SPW OFF";
JOBS[SPW6,J]←JOBS[SPW10,J]←0;
END
ELSE IF VAL LAND '40 THEN BEGIN
VAL←VAL-'40;
S3←" SPW6 "&CVOS(VAL);
JOBS[SPW6,J]←VAL;
END
ELSE BEGIN
S3←" SPW10 "&CVOS(VAL);
JOBS[SPW10,J]←VAL;
END;
[6] IF JOBS[GLUE,J]←VAL THEN S3←" GLUE "&CVS(VAL)
ELSE S3←" UNGLUE ";
[7] BEGIN
JOBS[LOCK,J]←VAL;
CASE VAL OF BEGIN
[0] S3←" UNLOCK ";
[1] S3←" LOCK ";
[2] S3←" LOKSWP "
END;
END;
[8] CASE VAL OF BEGIN
[0] S3←" FIT IN";
[1] S3←" FIT IN (L)"
END;
[9] BEGIN COMMENT OP='10 HI PAGE COUNT CHANGE;
VAL←WORD;
IF VAL=JOBS[HICOUNT,J] THEN GO TO SKIP_OURJOB
ELSE S3←" HICOUNT "&CVS(JOBS[HICOUNT,J]←VAL)
END;
[10] S3←" RUN ";
[11] BEGIN
VAL←(((VAL LSH 6) LOR J) LSH 18) LOR WORD;
TIME←VAL DIV 3600; VAL←VAL MOD 3600;
S4←'11&CVS(TIME DIV 60)&":"&CVS(TIME MOD 60)&":"
&CVS(VAL DIV 60)&"'"&CVS(VAL MOD 60);
GO TO SKIP_OURJOB;
END;
[12] CASE VAL OF BEGIN
[0] BEGIN
S3←" * FINISH IN";
JOBS[INOUT,J]←0;
END;
[1] BEGIN
S3←" * START OUT";
JOBS[INOUT,J]←-1;
END;
[2] S3←" * FORCE OUT";
[3] S3←" * SIZCHK ";
[4] S3←" * DEADLOCKED ";
[5] S3←" * RESCNIN ";
[6] S3←" * NO FIT "
END;
[13] BEGIN
COUNT_LINE;
OUT(1,"LOFREE="&CVS(WORD)&" HIFREE="&CVS(WORD)&" HIUSED="&
CVS(WORD)&" LOKTOT="&CVS(WORD)&" CORMX="&
CVS(WORD LSH -9)&" CORHMX="&CVS(WORD LSH -9)&CRLF);
GO TO SKIP_OURJOB;
END
END;
IF (¬SPECIAL ∨ (OP='10 ∨ OP=7)) ∧ JOBS[QUEUE,J]≥0 ∧ INIT=0 THEN PRINTIT
END;
RELEASE(0);
RELEASE(1);
CALL(0,"EXIT");
END;